using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._GeoAnalyticsServerTools._SummarizeData
{
    /// <summary>
    /// <para>Join Features</para>
    /// <para>Joins attributes from one layer to another based on spatial, temporal, or attribute relationships, or a combination of those relationships.</para>
    /// <para>根据空间、时间或属性关系或这些关系的组合，将属性从一个图层连接到另一个图层。</para>
    /// </summary>    
    [DisplayName("Join Features")]
    public class JoinFeatures : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public JoinFeatures()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_target_layer">
        /// <para>Target Layer</para>
        /// <para>Contains the target features. The attributes from the target features and the attributes from the joined features will be transferred to the output.</para>
        /// <para>包含目标要素。目标要素中的属性和连接要素中的属性将传输到输出中。</para>
        /// </param>
        /// <param name="_join_layer">
        /// <para>Join Layer</para>
        /// <para>Contains the join features. The attributes from the join features will be joined to the attributes of the target features. See the explanation of the Join Operation (join_operation in Python) parameter for details about how the aggregation of joined attributes are affected by the type of join operation.</para>
        /// <para>包含联接功能。连接要素中的属性将连接到目标要素的属性。有关联接操作类型如何影响联接属性的聚合的详细信息，请参阅联接操作（Python 中的 join_operation）参数的说明。</para>
        /// </param>
        /// <param name="_output_name">
        /// <para>Output Name</para>
        /// <para>The name of the output feature service.</para>
        /// <para>输出要素服务的名称。</para>
        /// </param>
        /// <param name="_join_operation">
        /// <para>Join Operation</para>
        /// <para><xdoc>
        ///   <para>Specifies how joins between the Target Layer values and the Join Layer values will be handled in the output if multiple join features are found that have the same spatial relationship with a single target feature.</para>
        ///   <bulletList>
        ///     <bullet_item>Join one to one—The attributes from the multiple join features will be aggregated. For example, if a point target feature is found in two separate polygon join features, the attributes from the two polygons will be aggregated before being transferred to the output point feature class. If one polygon has an attribute value of 3 and the other has a value of 7, and the summary statistic sum is specified for that field, the aggregated value in the output feature class will be 10. This is the default, and only the count statistic is returned.</bullet_item><para/>
        ///     <bullet_item>Join one to many—The output feature class will contain multiple copies (records) of the target feature. For example, if a single-point target feature is found in two separate polygon join features, the output feature class will contain two copies of the target feature: one record with the attributes of one polygon and another record with the attributes of the other polygon. There are no summary statistics available with this method.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定如果发现多个连接要素与单个目标要素具有相同的空间关系，则如何在输出中处理目标图层值和连接图层值之间的连接。</para>
        ///   <bulletList>
        ///     <bullet_item>一对一连接—将聚合多个连接要素中的属性。例如，如果在两个单独的面连接要素中找到点目标要素，则两个面中的属性将先进行聚合，然后再传输到输出点要素类。如果一个面的属性值为 3，另一个面的属性值为 7，并且为该字段指定了汇总统计总和，则输出要素类中的聚合值将为 10。这是默认设置，仅返回计数统计信息。</bullet_item><para/>
        ///     <bullet_item>连接一对多 - 输出要素类将包含目标要素的多个副本（记录）。例如，如果在两个单独的面连接要素中找到单点目标要素，则输出要素类将包含目标要素的两个副本：一个记录具有一个面的属性，另一个记录具有另一个面的属性。此方法没有可用的汇总统计量。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public JoinFeatures(object _target_layer, object _join_layer, object _output_name, _join_operation_value _join_operation)
        {
            this._target_layer = _target_layer;
            this._join_layer = _join_layer;
            this._output_name = _output_name;
            this._join_operation = _join_operation;
        }
        public override string ToolboxName => "GeoAnalytics Server Tools";

        public override string ToolName => "Join Features";

        public override string CallName => "geoanalytics.JoinFeatures";

        public override List<string> AcceptEnvironments => ["extent", "outputCoordinateSystem", "workspace"];

        public override object[] ParameterInfo => [_target_layer, _join_layer, _output_name, _join_operation.GetGPValue(), _spatial_relationship.GetGPValue(), _spatial_near_distance, _temporal_relationship.GetGPValue(), _temporal_near_distance, _attribute_relationship, _summary_fields, _join_condition, _output, _data_store.GetGPValue(), _keep_all_target_features.GetGPValue()];

        /// <summary>
        /// <para>Target Layer</para>
        /// <para>Contains the target features. The attributes from the target features and the attributes from the joined features will be transferred to the output.</para>
        /// <para>包含目标要素。目标要素中的属性和连接要素中的属性将传输到输出中。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_layer { get; set; }


        /// <summary>
        /// <para>Join Layer</para>
        /// <para>Contains the join features. The attributes from the join features will be joined to the attributes of the target features. See the explanation of the Join Operation (join_operation in Python) parameter for details about how the aggregation of joined attributes are affected by the type of join operation.</para>
        /// <para>包含联接功能。连接要素中的属性将连接到目标要素的属性。有关联接操作类型如何影响联接属性的聚合的详细信息，请参阅联接操作（Python 中的 join_operation）参数的说明。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Join Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _join_layer { get; set; }


        /// <summary>
        /// <para>Output Name</para>
        /// <para>The name of the output feature service.</para>
        /// <para>输出要素服务的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output_name { get; set; }


        /// <summary>
        /// <para>Join Operation</para>
        /// <para><xdoc>
        ///   <para>Specifies how joins between the Target Layer values and the Join Layer values will be handled in the output if multiple join features are found that have the same spatial relationship with a single target feature.</para>
        ///   <bulletList>
        ///     <bullet_item>Join one to one—The attributes from the multiple join features will be aggregated. For example, if a point target feature is found in two separate polygon join features, the attributes from the two polygons will be aggregated before being transferred to the output point feature class. If one polygon has an attribute value of 3 and the other has a value of 7, and the summary statistic sum is specified for that field, the aggregated value in the output feature class will be 10. This is the default, and only the count statistic is returned.</bullet_item><para/>
        ///     <bullet_item>Join one to many—The output feature class will contain multiple copies (records) of the target feature. For example, if a single-point target feature is found in two separate polygon join features, the output feature class will contain two copies of the target feature: one record with the attributes of one polygon and another record with the attributes of the other polygon. There are no summary statistics available with this method.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定如果发现多个连接要素与单个目标要素具有相同的空间关系，则如何在输出中处理目标图层值和连接图层值之间的连接。</para>
        ///   <bulletList>
        ///     <bullet_item>一对一连接—将聚合多个连接要素中的属性。例如，如果在两个单独的面连接要素中找到点目标要素，则两个面中的属性将先进行聚合，然后再传输到输出点要素类。如果一个面的属性值为 3，另一个面的属性值为 7，并且为该字段指定了汇总统计总和，则输出要素类中的聚合值将为 10。这是默认设置，仅返回计数统计信息。</bullet_item><para/>
        ///     <bullet_item>连接一对多 - 输出要素类将包含目标要素的多个副本（记录）。例如，如果在两个单独的面连接要素中找到单点目标要素，则输出要素类将包含目标要素的两个副本：一个记录具有一个面的属性，另一个记录具有另一个面的属性。此方法没有可用的汇总统计量。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Join Operation")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _join_operation_value _join_operation { get; set; }

        public enum _join_operation_value
        {
            /// <summary>
            /// <para>Join one to one</para>
            /// <para>Join one to one—The attributes from the multiple join features will be aggregated. For example, if a point target feature is found in two separate polygon join features, the attributes from the two polygons will be aggregated before being transferred to the output point feature class. If one polygon has an attribute value of 3 and the other has a value of 7, and the summary statistic sum is specified for that field, the aggregated value in the output feature class will be 10. This is the default, and only the count statistic is returned.</para>
            /// <para>一对一连接—将聚合多个连接要素中的属性。例如，如果在两个单独的面连接要素中找到点目标要素，则两个面中的属性将先进行聚合，然后再传输到输出点要素类。如果一个面的属性值为 3，另一个面的属性值为 7，并且为该字段指定了汇总统计总和，则输出要素类中的聚合值将为 10。这是默认设置，仅返回计数统计信息。</para>
            /// </summary>
            [Description("Join one to one")]
            [GPEnumValue("JOIN_ONE_TO_ONE")]
            _JOIN_ONE_TO_ONE,

            /// <summary>
            /// <para>Join one to many</para>
            /// <para>Join one to many—The output feature class will contain multiple copies (records) of the target feature. For example, if a single-point target feature is found in two separate polygon join features, the output feature class will contain two copies of the target feature: one record with the attributes of one polygon and another record with the attributes of the other polygon. There are no summary statistics available with this method.</para>
            /// <para>连接一对多 - 输出要素类将包含目标要素的多个副本（记录）。例如，如果在两个单独的面连接要素中找到单点目标要素，则输出要素类将包含目标要素的两个副本：一个记录具有一个面的属性，另一个记录具有另一个面的属性。此方法没有可用的汇总统计量。</para>
            /// </summary>
            [Description("Join one to many")]
            [GPEnumValue("JOIN_ONE_TO_MANY")]
            _JOIN_ONE_TO_MANY,

        }

        /// <summary>
        /// <para>Spatial Relationship</para>
        /// <para><xdoc>
        ///   <para>Specifies the criteria that will be used to spatially join features.</para>
        ///   <bulletList>
        ///     <bullet_item>Intersects—The features in the join features will be matched if they intersect a target feature. This is the default.</bullet_item><para/>
        ///     <bullet_item>Equals— The features in the join features will be matched if they are the same geometry as a target feature.</bullet_item><para/>
        ///     <bullet_item>Planar Near—The features in the join features will be matched if they are within a specified distance of a target feature. The distance is measured using planar distance. Specify a distance in the Spatial Near Distance parameter.</bullet_item><para/>
        ///     <bullet_item>Geodesic Near—The features in the join features will be matched if they are within a specified distance of a target feature. The distance is measured geodesically. Specify a distance in the Spatial Near Distance parameter. This option is available with ArcGIS Enterprise 10.7 or later.</bullet_item><para/>
        ///     <bullet_item>Contains—The features in the join features will be matched if a target feature contains them. The target features must be polygons or polylines. The join features can only be polygons when the target features are also polygons. A polygon can contain any feature type. A polyline can contain only polylines and points. A point cannot contain any feature, not even a point. If the join feature is entirely on the boundary of the target feature (no part is properly inside or outside), the feature will not be matched.</bullet_item><para/>
        ///     <bullet_item>Within—The features in the join features will be matched if a target feature is within them. It is the opposite of the contains relationship. For this option, the target features can only be polygons when the join features are also polygons. A point can be a join feature only if a point is also a target feature. If the entirety of the feature in the join features is on the boundary of the target feature, the feature will not be matched.</bullet_item><para/>
        ///     <bullet_item>Touches—The features in the join features will be matched if they have a boundary that touches a target feature. When the target and join features are lines or polygons, the boundary of the join feature can only touch the boundary of the target feature, and no part of the join feature can cross the boundary of the target feature.</bullet_item><para/>
        ///     <bullet_item>Crosses—The features in the join features will be matched if a target feature is crossed by their outline. The join and target features must be lines or polygons. If polygons are used for the join or target features, the polygon's boundary (line) will be used. Lines that cross at a point will be matched, but lines that share a line segment will not.</bullet_item><para/>
        ///     <bullet_item>Overlaps—The features in the join features will be matched if they overlap a target feature.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于在空间上连接要素的条件。</para>
        ///   <bulletList>
        ///     <bullet_item>相交—如果连接要素中的要素与目标要素相交，则这些要素将被匹配。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>等于- 如果连接要素中的要素与目标要素的几何相同，则这些要素将被匹配。</bullet_item><para/>
        ///     <bullet_item>平面近处—如果连接要素中的要素位于目标要素的指定距离内，则这些要素将被匹配。使用平面距离测量距离。在空间近距离参数中指定距离。</bullet_item><para/>
        ///     <bullet_item>测地线附近—如果连接要素中的要素位于目标要素的指定距离内，则将匹配这些要素。距离是用测地线测量的。在空间近距离参数中指定距离。此选项适用于 ArcGIS Enterprise 10.7 或更高版本。</bullet_item><para/>
        ///     <bullet_item>包含—如果目标要素包含连接要素中的要素，则这些要素将被匹配。目标要素必须是面或折线。当目标要素也是面时，连接要素只能是面。面可以包含任何要素类型。折线只能包含折线和点。一个点不能包含任何特征，甚至不能包含一个点。如果连接要素完全位于目标要素的边界上（没有零件在内部或外部正确），则该要素将不匹配。</bullet_item><para/>
        ///     <bullet_item>内部—如果目标要素位于连接要素中，则将匹配连接要素中的要素。它与包含关系相反。对于此选项，当连接要素也是面时，目标要素只能是面。只有当点也是目标要素时，点才能成为连接要素。如果连接要素中的整个要素位于目标要素的边界上，则该要素将不匹配。</bullet_item><para/>
        ///     <bullet_item>触摸 - 如果连接要素中的要素具有与目标要素接触的边界，则这些要素将被匹配。当目标要素和连接要素为直线或面时，连接要素的边界只能接触目标要素的边界，连接要素的任何部分都不能越过目标要素的边界。</bullet_item><para/>
        ///     <bullet_item>交叉—如果目标要素的轮廓与目标要素相交，则连接要素中的要素将被匹配。连接要素和目标要素必须为直线或面。如果将面用于连接要素或目标要素，则将使用面的边界（线）。在某个点交叉的线将被匹配，但共享线段的线将不匹配。</bullet_item><para/>
        ///     <bullet_item>重叠—如果连接要素中的要素与目标要素重叠，则这些要素将被匹配。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spatial Relationship")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _spatial_relationship_value? _spatial_relationship { get; set; } = null;

        public enum _spatial_relationship_value
        {
            /// <summary>
            /// <para>Equals</para>
            /// <para>Equals— The features in the join features will be matched if they are the same geometry as a target feature.</para>
            /// <para>等于- 如果连接要素中的要素与目标要素的几何相同，则这些要素将被匹配。</para>
            /// </summary>
            [Description("Equals")]
            [GPEnumValue("EQUALS")]
            _EQUALS,

            /// <summary>
            /// <para>Intersects</para>
            /// <para>Intersects—The features in the join features will be matched if they intersect a target feature. This is the default.</para>
            /// <para>相交—如果连接要素中的要素与目标要素相交，则这些要素将被匹配。这是默认设置。</para>
            /// </summary>
            [Description("Intersects")]
            [GPEnumValue("INTERSECTS")]
            _INTERSECTS,

            /// <summary>
            /// <para>Contains</para>
            /// <para>Contains—The features in the join features will be matched if a target feature contains them. The target features must be polygons or polylines. The join features can only be polygons when the target features are also polygons. A polygon can contain any feature type. A polyline can contain only polylines and points. A point cannot contain any feature, not even a point. If the join feature is entirely on the boundary of the target feature (no part is properly inside or outside), the feature will not be matched.</para>
            /// <para>包含—如果目标要素包含连接要素中的要素，则这些要素将被匹配。目标要素必须是面或折线。当目标要素也是面时，连接要素只能是面。面可以包含任何要素类型。折线只能包含折线和点。一个点不能包含任何特征，甚至不能包含一个点。如果连接要素完全位于目标要素的边界上（没有零件在内部或外部正确），则该要素将不匹配。</para>
            /// </summary>
            [Description("Contains")]
            [GPEnumValue("CONTAINS")]
            _CONTAINS,

            /// <summary>
            /// <para>Within</para>
            /// <para>Within—The features in the join features will be matched if a target feature is within them. It is the opposite of the contains relationship. For this option, the target features can only be polygons when the join features are also polygons. A point can be a join feature only if a point is also a target feature. If the entirety of the feature in the join features is on the boundary of the target feature, the feature will not be matched.</para>
            /// <para>内部—如果目标要素位于连接要素中，则将匹配连接要素中的要素。它与包含关系相反。对于此选项，当连接要素也是面时，目标要素只能是面。只有当点也是目标要素时，点才能成为连接要素。如果连接要素中的整个要素位于目标要素的边界上，则该要素将不匹配。</para>
            /// </summary>
            [Description("Within")]
            [GPEnumValue("WITHIN")]
            _WITHIN,

            /// <summary>
            /// <para>Crosses</para>
            /// <para>Crosses—The features in the join features will be matched if a target feature is crossed by their outline. The join and target features must be lines or polygons. If polygons are used for the join or target features, the polygon's boundary (line) will be used. Lines that cross at a point will be matched, but lines that share a line segment will not.</para>
            /// <para>交叉—如果目标要素的轮廓与目标要素相交，则连接要素中的要素将被匹配。连接要素和目标要素必须为直线或面。如果将面用于连接要素或目标要素，则将使用面的边界（线）。在某个点交叉的线将被匹配，但共享线段的线将不匹配。</para>
            /// </summary>
            [Description("Crosses")]
            [GPEnumValue("CROSSES")]
            _CROSSES,

            /// <summary>
            /// <para>Touches</para>
            /// <para>Touches—The features in the join features will be matched if they have a boundary that touches a target feature. When the target and join features are lines or polygons, the boundary of the join feature can only touch the boundary of the target feature, and no part of the join feature can cross the boundary of the target feature.</para>
            /// <para>触摸 - 如果连接要素中的要素具有与目标要素接触的边界，则这些要素将被匹配。当目标要素和连接要素为直线或面时，连接要素的边界只能接触目标要素的边界，连接要素的任何部分都不能越过目标要素的边界。</para>
            /// </summary>
            [Description("Touches")]
            [GPEnumValue("TOUCHES")]
            _TOUCHES,

            /// <summary>
            /// <para>Overlaps</para>
            /// <para>Overlaps—The features in the join features will be matched if they overlap a target feature.</para>
            /// <para>重叠—如果连接要素中的要素与目标要素重叠，则这些要素将被匹配。</para>
            /// </summary>
            [Description("Overlaps")]
            [GPEnumValue("OVERLAPS")]
            _OVERLAPS,

            /// <summary>
            /// <para>Planar Near</para>
            /// <para>Planar Near—The features in the join features will be matched if they are within a specified distance of a target feature. The distance is measured using planar distance. Specify a distance in the Spatial Near Distance parameter.</para>
            /// <para>平面近处—如果连接要素中的要素位于目标要素的指定距离内，则这些要素将被匹配。使用平面距离测量距离。在空间近距离参数中指定距离。</para>
            /// </summary>
            [Description("Planar Near")]
            [GPEnumValue("NEAR")]
            _NEAR,

            /// <summary>
            /// <para>Geodesic Near</para>
            /// <para>Geodesic Near—The features in the join features will be matched if they are within a specified distance of a target feature. The distance is measured geodesically. Specify a distance in the Spatial Near Distance parameter. This option is available with ArcGIS Enterprise 10.7 or later.</para>
            /// <para>测地线附近—如果连接要素中的要素位于目标要素的指定距离内，则将匹配这些要素。距离是用测地线测量的。在空间近距离参数中指定距离。此选项适用于 ArcGIS Enterprise 10.7 或更高版本。</para>
            /// </summary>
            [Description("Geodesic Near")]
            [GPEnumValue("NEAR_GEODESIC")]
            _NEAR_GEODESIC,

        }

        /// <summary>
        /// <para>Spatial Near Distance</para>
        /// <para>The distance from a target feature within which join features will be considered for the spatial join. A search radius is only valid when the Spatial Relationship parameter value is Planar Near or Geodesic Near.</para>
        /// <para>与目标要素的距离，在该距离中，将考虑空间连接要素。仅当空间关系参数值为“平面近景”或“测地线近景”时，搜索半径才有效。</para>
        /// <para>单位： Feet | Yards | Miles | NauticalMiles | Meters | Kilometers </para>
        /// </summary>
        [DisplayName("Spatial Near Distance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string? _spatial_near_distance { get; set; } = null;


        /// <summary>
        /// <para>Temporal Relationship</para>
        /// <para><xdoc>
        ///   <para>Specifies the time criteria that will be used to match features.</para>
        ///   <bulletList>
        ///     <bullet_item>Meets—When a target time interval end is equal to the join time interval start, the target time meets the join time.</bullet_item><para/>
        ///     <bullet_item>Met by—When a target time interval start is equal to the join time interval end, the target time is met by the join time.</bullet_item><para/>
        ///     <bullet_item>Overlaps—When a target time interval starts and ends before the start and end of the join time interval, the target time overlaps the join time.</bullet_item><para/>
        ///     <bullet_item>Overlapped by—When a target time interval starts and ends after the start and end time of the join time interval, the target time is overlapped by the join time.</bullet_item><para/>
        ///     <bullet_item>During—When a target time occurs between the start and end of the join time interval, the target time is during the join time.</bullet_item><para/>
        ///     <bullet_item>Contains—When a join feature time occurs between the start and end of the target time interval, the target time contains the join time.</bullet_item><para/>
        ///     <bullet_item>Equals—Two times are considered equal if their instants or intervals are identical.</bullet_item><para/>
        ///     <bullet_item>Finishes—When a target time ends at the same time as a join time, and the target time started after the join time, the target time finishes the join time.</bullet_item><para/>
        ///     <bullet_item>Finished by—When a join feature time ends at the same time as a target time, and the join time started after the target time, the target time is finished by the join time.</bullet_item><para/>
        ///     <bullet_item>Starts—When a target time starts at the same time as the join time interval and ends before the join time interval ends, the target time starts the join time.</bullet_item><para/>
        ///     <bullet_item>Started by—When a target interval time starts at the same time as the join time and ends after the join time, the target time is started by the join time.</bullet_item><para/>
        ///     <bullet_item>Intersects—When any part of a target time occurs at the same time as the join time, the target time intersects the join time.</bullet_item><para/>
        ///     <bullet_item>Near—When a target time is within a specified range of time from the join time, the target time is near the join time.</bullet_item><para/>
        ///     <bullet_item>Near before—When a target time is before the join time but within a specified range of time from the join time, the target time is near before the join time. This option is available with ArcGIS Enterprise 10.6 or later.</bullet_item><para/>
        ///     <bullet_item>Near after—When a target time is after the join time but within a specified range of time from the join time, the target time is near after the join time. This option is available with ArcGIS Enterprise 10.6 or later.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于匹配要素的时间条件。</para>
        ///   <bulletList>
        ///     <bullet_item>满足 - 当目标时间间隔结束时间等于连接时间间隔开始时，目标时间与连接时间相等。</bullet_item><para/>
        ///     <bullet_item>满足者 - 当目标时间间隔开始时间等于连接时间间隔结束时，目标时间由连接时间满足。</bullet_item><para/>
        ///     <bullet_item>重叠 - 当目标时间间隔在连接时间间隔的开始和结束之前开始和结束时，目标时间与连接时间重叠。</bullet_item><para/>
        ///     <bullet_item>重叠 - 当目标时间间隔在连接时间间隔的开始和结束时间之后开始和结束时，目标时间将与连接时间重叠。</bullet_item><para/>
        ///     <bullet_item>期间 - 当目标时间发生在连接时间间隔的开始和结束之间时，目标时间在连接时间内。</bullet_item><para/>
        ///     <bullet_item>包含 - 当连接要素时间发生在目标时间间隔的开始和结束之间时，目标时间包含连接时间。</bullet_item><para/>
        ///     <bullet_item>相等 - 如果两个时间的瞬间或间隔相同，则认为两个时间相等。</bullet_item><para/>
        ///     <bullet_item>完成 - 当目标时间与连接时间同时结束，并且目标时间在连接时间之后开始时，目标时间完成连接时间。</bullet_item><para/>
        ///     <bullet_item>完成者 - 当连接要素时间与目标时间同时结束，并且连接时间在目标时间之后开始时，目标时间由连接时间结束。</bullet_item><para/>
        ///     <bullet_item>开始 - 当目标时间与连接时间间隔同时开始并在连接时间间隔结束之前结束时，目标时间开始连接时间。</bullet_item><para/>
        ///     <bullet_item>起始时间 - 当目标间隔时间与连接时间同时开始并在连接时间之后结束时，目标时间由连接时间开始。</bullet_item><para/>
        ///     <bullet_item>相交 - 当目标时间的任何部分与连接时间同时发生时，目标时间将与连接时间相交。</bullet_item><para/>
        ///     <bullet_item>接近 - 当目标时间与连接时间相距指定时间范围内时，目标时间接近连接时间。</bullet_item><para/>
        ///     <bullet_item>接近之前 - 当目标时间在连接时间之前但在连接时间的指定时间范围内时，目标时间在连接时间之前接近。此选项适用于 ArcGIS Enterprise 10.6 或更高版本。</bullet_item><para/>
        ///     <bullet_item>近后 - 当目标时间晚于连接时间，但距离连接时间在指定时间范围内时，目标时间在连接时间之后。此选项适用于 ArcGIS Enterprise 10.6 或更高版本。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Temporal Relationship")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _temporal_relationship_value? _temporal_relationship { get; set; } = null;

        public enum _temporal_relationship_value
        {
            /// <summary>
            /// <para>Meets</para>
            /// <para>Meets—When a target time interval end is equal to the join time interval start, the target time meets the join time.</para>
            /// <para>满足 - 当目标时间间隔结束时间等于连接时间间隔开始时，目标时间与连接时间相等。</para>
            /// </summary>
            [Description("Meets")]
            [GPEnumValue("MEETS")]
            _MEETS,

            /// <summary>
            /// <para>Met by</para>
            /// <para>Met by—When a target time interval start is equal to the join time interval end, the target time is met by the join time.</para>
            /// <para>满足者 - 当目标时间间隔开始时间等于连接时间间隔结束时，目标时间由连接时间满足。</para>
            /// </summary>
            [Description("Met by")]
            [GPEnumValue("MET_BY")]
            _MET_BY,

            /// <summary>
            /// <para>Overlaps</para>
            /// <para>Overlaps—When a target time interval starts and ends before the start and end of the join time interval, the target time overlaps the join time.</para>
            /// <para>重叠 - 当目标时间间隔在连接时间间隔的开始和结束之前开始和结束时，目标时间与连接时间重叠。</para>
            /// </summary>
            [Description("Overlaps")]
            [GPEnumValue("OVERLAPS")]
            _OVERLAPS,

            /// <summary>
            /// <para>Overlapped by</para>
            /// <para>Overlapped by—When a target time interval starts and ends after the start and end time of the join time interval, the target time is overlapped by the join time.</para>
            /// <para>重叠 - 当目标时间间隔在连接时间间隔的开始和结束时间之后开始和结束时，目标时间将与连接时间重叠。</para>
            /// </summary>
            [Description("Overlapped by")]
            [GPEnumValue("OVERLAPPED_BY")]
            _OVERLAPPED_BY,

            /// <summary>
            /// <para>During</para>
            /// <para>During—When a target time occurs between the start and end of the join time interval, the target time is during the join time.</para>
            /// <para>期间 - 当目标时间发生在连接时间间隔的开始和结束之间时，目标时间在连接时间内。</para>
            /// </summary>
            [Description("During")]
            [GPEnumValue("DURING")]
            _DURING,

            /// <summary>
            /// <para>Contains</para>
            /// <para>Contains—When a join feature time occurs between the start and end of the target time interval, the target time contains the join time.</para>
            /// <para>包含 - 当连接要素时间发生在目标时间间隔的开始和结束之间时，目标时间包含连接时间。</para>
            /// </summary>
            [Description("Contains")]
            [GPEnumValue("CONTAINS")]
            _CONTAINS,

            /// <summary>
            /// <para>Equals</para>
            /// <para>Equals—Two times are considered equal if their instants or intervals are identical.</para>
            /// <para>相等 - 如果两个时间的瞬间或间隔相同，则认为两个时间相等。</para>
            /// </summary>
            [Description("Equals")]
            [GPEnumValue("EQUALS")]
            _EQUALS,

            /// <summary>
            /// <para>Finishes</para>
            /// <para>Finishes—When a target time ends at the same time as a join time, and the target time started after the join time, the target time finishes the join time.</para>
            /// <para>完成 - 当目标时间与连接时间同时结束，并且目标时间在连接时间之后开始时，目标时间完成连接时间。</para>
            /// </summary>
            [Description("Finishes")]
            [GPEnumValue("FINISHES")]
            _FINISHES,

            /// <summary>
            /// <para>Finished by</para>
            /// <para>Finished by—When a join feature time ends at the same time as a target time, and the join time started after the target time, the target time is finished by the join time.</para>
            /// <para>完成者 - 当连接要素时间与目标时间同时结束，并且连接时间在目标时间之后开始时，目标时间由连接时间结束。</para>
            /// </summary>
            [Description("Finished by")]
            [GPEnumValue("FINISHED_BY")]
            _FINISHED_BY,

            /// <summary>
            /// <para>Starts</para>
            /// <para>Starts—When a target time starts at the same time as the join time interval and ends before the join time interval ends, the target time starts the join time.</para>
            /// <para>开始 - 当目标时间与连接时间间隔同时开始并在连接时间间隔结束之前结束时，目标时间开始连接时间。</para>
            /// </summary>
            [Description("Starts")]
            [GPEnumValue("STARTS")]
            _STARTS,

            /// <summary>
            /// <para>Started by</para>
            /// <para>Started by—When a target interval time starts at the same time as the join time and ends after the join time, the target time is started by the join time.</para>
            /// <para>起始时间 - 当目标间隔时间与连接时间同时开始并在连接时间之后结束时，目标时间由连接时间开始。</para>
            /// </summary>
            [Description("Started by")]
            [GPEnumValue("STARTED_BY")]
            _STARTED_BY,

            /// <summary>
            /// <para>Intersects</para>
            /// <para>Intersects—When any part of a target time occurs at the same time as the join time, the target time intersects the join time.</para>
            /// <para>相交 - 当目标时间的任何部分与连接时间同时发生时，目标时间将与连接时间相交。</para>
            /// </summary>
            [Description("Intersects")]
            [GPEnumValue("INTERSECTS")]
            _INTERSECTS,

            /// <summary>
            /// <para>Near</para>
            /// <para>Near—When a target time is within a specified range of time from the join time, the target time is near the join time.</para>
            /// <para>接近 - 当目标时间与连接时间相距指定时间范围内时，目标时间接近连接时间。</para>
            /// </summary>
            [Description("Near")]
            [GPEnumValue("NEAR")]
            _NEAR,

            /// <summary>
            /// <para>Near before</para>
            /// <para>Near before—When a target time is before the join time but within a specified range of time from the join time, the target time is near before the join time. This option is available with ArcGIS Enterprise 10.6 or later.</para>
            /// <para>接近之前 - 当目标时间在连接时间之前但在连接时间的指定时间范围内时，目标时间在连接时间之前接近。此选项适用于 ArcGIS Enterprise 10.6 或更高版本。</para>
            /// </summary>
            [Description("Near before")]
            [GPEnumValue("NEAR_BEFORE")]
            _NEAR_BEFORE,

            /// <summary>
            /// <para>Near after</para>
            /// <para>Near after—When a target time is after the join time but within a specified range of time from the join time, the target time is near after the join time. This option is available with ArcGIS Enterprise 10.6 or later.</para>
            /// <para>近后 - 当目标时间晚于连接时间，但距离连接时间在指定时间范围内时，目标时间在连接时间之后。此选项适用于 ArcGIS Enterprise 10.6 或更高版本。</para>
            /// </summary>
            [Description("Near after")]
            [GPEnumValue("NEAR_AFTER")]
            _NEAR_AFTER,

        }

        /// <summary>
        /// <para>Temporal Near Distance</para>
        /// <para>The distance in time from a target feature within which join features will be considered for the spatial join. A time is only valid when the Temporal Relationship parameter value is Near, Near Before, or Near After and both features are time enabled.</para>
        /// <para>与目标要素的时间距离，在该距离内，将考虑空间连接要素的连接要素。仅当时态关系参数值为“近”、“近前”或“近后”且两个要素都启用了时间时，时间才有效。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Temporal Near Distance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _temporal_near_distance { get; set; } = null;


        /// <summary>
        /// <para>Attribute Relationship</para>
        /// <para><xdoc>
        ///   <para>Joins features based on values in an attribute field. Specify the attribute field from the target layer that matches an attribute field from the join layer.
        ///   <bulletList>
        ///     <bullet_item>Target Field—An attribute field from the target layer containing values to match.  </bullet_item><para/>
        ///     <bullet_item>Join Field—An attribute field from the join layer containing values to match.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>根据属性字段中的值连接要素。指定目标图层中的属性字段，该字段与连接图层中的属性字段匹配。
        ///   <bulletList>
        ///     <bullet_item>目标字段 - 目标图层中的属性字段，其中包含要匹配的值。</bullet_item><para/>
        ///     <bullet_item>连接字段 - 连接图层中的属性字段，其中包含要匹配的值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Attribute Relationship")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _attribute_relationship { get; set; } = null;


        /// <summary>
        /// <para>Summary Fields</para>
        /// <para>The statistics that will be calculated on specified fields.</para>
        /// <para>将对指定字段进行计算的统计信息。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Summary Fields")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _summary_fields { get; set; } = null;


        /// <summary>
        /// <para>Join Condition</para>
        /// <para><xdoc>
        ///   <para>Applies a condition to specified fields. Only features with fields that meet these conditions will be joined.</para>
        ///   <para>For example, you could apply a join condition to features in which the HealthSpending attribute in the join layer is more than 20 percent of the Income attribute in the target layer. In 10.5 and 10.5.1, the join condition to use to apply this expression is join["HealthSpending"] > target["Income"] * .2. In 10.6 and later, use an Arcade expression such as $join["HealthSpending"] > $target["Income"] * .2.</para>
        ///   <para></para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将条件应用于指定字段。只有具有满足这些条件的字段的要素才会被连接。</para>
        ///   <para>例如，您可以将连接条件应用于连接图层中的 HealthSpending 属性大于目标图层中 Income 属性的 20% 的要素。在 10.5 和 10.5.1 中，用于应用此表达式的连接条件是 join[“HealthSpending”] > target[“Income”] * .2。在 10.6 及更高版本中，使用 Arcade 表达式，例如 $join[“HealthSpending”] > $target[“Income”] * .2。</para>
        ///   <para></para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Join Condition")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _join_condition { get; set; } = null;


        /// <summary>
        /// <para>Output_Feature_Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output_Feature_Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output { get; set; }


        /// <summary>
        /// <para>Data Store</para>
        /// <para><xdoc>
        ///   <para>Specifies the ArcGIS Data Store where the output will be saved. The default is Spatiotemporal big data store. All results stored in a spatiotemporal big data store will be stored in WGS84. Results stored in a relational data store will maintain their coordinate system.</para>
        ///   <bulletList>
        ///     <bullet_item>Spatiotemporal big data store—Output will be stored in a spatiotemporal big data store. This is the default.</bullet_item><para/>
        ///     <bullet_item>Relational data store—Output will be stored in a relational data store.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将保存输出的 ArcGIS Data Store。默认值为 Spatiotemporal 大数据存储。存储在时空大数据存储中的所有结果都将存储在 WGS84 中。存储在关系数据存储中的结果将保留其坐标系。</para>
        ///   <bulletList>
        ///     <bullet_item>时空大数据存储 - 输出将存储在时空大数据存储中。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>关系数据存储 - 输出将存储在关系数据存储中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Data Store")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _data_store_value _data_store { get; set; } = _data_store_value._SPATIOTEMPORAL_DATA_STORE;

        public enum _data_store_value
        {
            /// <summary>
            /// <para>Spatiotemporal big data store</para>
            /// <para>Spatiotemporal big data store—Output will be stored in a spatiotemporal big data store. This is the default.</para>
            /// <para>时空大数据存储 - 输出将存储在时空大数据存储中。这是默认设置。</para>
            /// </summary>
            [Description("Spatiotemporal big data store")]
            [GPEnumValue("SPATIOTEMPORAL_DATA_STORE")]
            _SPATIOTEMPORAL_DATA_STORE,

            /// <summary>
            /// <para>Relational data store</para>
            /// <para>Relational data store—Output will be stored in a relational data store.</para>
            /// <para>关系数据存储 - 输出将存储在关系数据存储中。</para>
            /// </summary>
            [Description("Relational data store")]
            [GPEnumValue("RELATIONAL_DATA_STORE")]
            _RELATIONAL_DATA_STORE,

        }

        /// <summary>
        /// <para>Keep All Target Features</para>
        /// <para><xdoc>
        ///   <para>Specifies whether all target features will be maintained in the output feature class (known as a left outer join) or only those that have the specified relationships with the join features (inner join).
        ///   <bulletList>
        ///     <bullet_item>Checked—All target features will be maintained in the output (outer join).  </bullet_item><para/>
        ///     <bullet_item>Unchecked—Only those target features that have the specified relationships will be maintained in the output feature class (inner join). Any point features not within the polygon features will be excluded from the output. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是将所有目标要素保留在输出要素类（称为左侧外部连接）中，还是仅保留与连接要素具有指定关系的要素（内部连接）。
        ///   <bulletList>
        ///     <bullet_item>选中 - 所有目标要素都将保留在输出（外部连接）中。</bullet_item><para/>
        ///     <bullet_item>未选中 - 只有具有指定关系的目标要素才会保留在输出要素类（内部连接）中。任何不在面要素内的点要素都将从输出中排除。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Keep All Target Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _keep_all_target_features_value? _keep_all_target_features { get; set; } = null;

        public enum _keep_all_target_features_value
        {
            /// <summary>
            /// <para>KEEP_ALL</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("KEEP_ALL")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>KEEP_COMMON</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("KEEP_COMMON")]
            [GPEnumValue("false")]
            _false,

        }

        public JoinFeatures SetEnv(object extent = null, object outputCoordinateSystem = null, object workspace = null)
        {
            base.SetEnv(extent: extent, outputCoordinateSystem: outputCoordinateSystem, workspace: workspace);
            return this;
        }

    }

}